package com.weilan.ark3.utils;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.springframework.stereotype.Component;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.*;


@Component //
public class UtilFile {


    int nScanTaskNum = 0;
    String strModbusHost = null;


//
//    public static byte[] readFile(String path, String file_name) {
//        byte[] byRetBuf = null;
//        try {
//            File file = null;
//            if (path == null) {
//                path = "./";
//            }
//            file = new File(
//                    path,
//                    file_name);
//            FileInputStream fis = new FileInputStream(
//                    file);
//            int fileLen = fis.available();
//            byRetBuf = new byte[fileLen];
//            fis.read(byRetBuf);  // 读入流,保存在byte数组
//            fis.close();
//
//        } catch (Exception e) {
//          //  e.printStackTrace();
//            System.out.println("读数据 失败: " + e.getMessage());
//        }
//        return byRetBuf;
//    }


    public static byte[] readFile(String path, String file_name) {
        byte[] byRetBuf = null;
        try {
            File file = null;
            if (path == null) {
                path = "./";
            }
            file = new File(
                    path,
                    file_name);
            FileInputStream fis = new FileInputStream(
                    file);
            int fileLen = fis.available();
            byRetBuf = new byte[fileLen];
            fis.read(byRetBuf);  // 读入流,保存在byte数组
            fis.close();

        } catch (Exception e) {
            e.printStackTrace();
        }
        return byRetBuf;
    }


    /**
     * 获取指定文件夹下所有文件，不含文件夹里的文件
     *
     * @param dirFile 文件夹
     * @return
     */
    public static List<File> getAllFile(File dirFile) {
        // 如果文件夹不存在或着不是文件夹，则返回 null
        if (Objects.isNull(dirFile) || !dirFile.exists() || dirFile.isFile())
            return null;

        File[] childrenFiles = dirFile.listFiles();
        if (Objects.isNull(childrenFiles) || childrenFiles.length == 0)
            return null;

        List<File> files = new ArrayList<>();
        for (File childFile : childrenFiles) {
            // 如果是文件，直接添加到结果集合
            if (childFile.isFile()) {
                files.add(childFile);
            }
            //以下几行代码取消注释后可以将所有子文件夹里的文件也获取到列表里
//            else {
//                // 如果是文件夹，则将其内部文件添加进结果集合
//                List<File> cFiles = getAllFile(childFile);
//                if (Objects.isNull(cFiles) || cFiles.isEmpty()) continue;
//                files.addAll(cFiles);
//            }
        }
        return files;
    }


    public static byte[] writeFile(String path, String file_name,byte byData[]) {
        byte[] byRetBuf = null;
        try {
            File file = null;
            if (path == null) {
                path = "./";
            }
            file = new File(
                    path,
                    file_name);
            FileOutputStream fis = new FileOutputStream(
                    file);
            //  byRetBuf = new byte[byData];
            fis.write(byData);  // 读入流,保存在byte数组
            fis.close();

        } catch (Exception e) {
            e.printStackTrace();
        }
        return byRetBuf;
    }
    public static String saveFileItem(String fileName, String item,String value)// "config.ini","modbus_host"
    {
        String strRet = null;
        byte[] byData = readFile(null, fileName);
        JSONObject jsonData =null;
        if(byData!=null && byData.length>0) {

            String strData = new String(byData);
            try {
                jsonData = (JSONObject) JSONObject.parse(strData);
            }
            catch (Exception e)
            {
                System.out.println("读取保存文件数据失败,JSON失败:  "+strData);
                jsonData =new JSONObject();
            }
        }
        else
        {
            jsonData =new JSONObject();
        }
        jsonData.put(item,value);
        writeFile(null,fileName, JSON.toJSONString(jsonData).getBytes());
        return strRet;
    }


    public static String getFileItem(String fileName, String item)// "config.ini","modbus_host"
    {
        String strRet = null;
        byte[] byData = UtilFile.readFile(null, fileName);
        String strData = new String(byData);
        // System.out.println("读取配置文件:  \r\n"+strData);
        JSONObject jsonData = (JSONObject) JSONObject.parse(strData);
        strRet = jsonData.getString(item);
        return strRet;
    }

    public static JSONArray getFileItemArray(String fileName, String item)// "config.ini","modbus_host"
    {
        JSONArray arrayJsonRet = null;
        byte[] byData = UtilFile.readFile(null, fileName);
        String strData = new String(byData);
        System.out.println("读取配置文件:  \r\n" + strData);
        JSONObject jsonData = (JSONObject) JSONObject.parse(strData);
        arrayJsonRet = jsonData.getJSONArray(item);
        return arrayJsonRet;
    }


    /*日期加+1天*/
    public static Date dateAddOne(Date date) {
        Calendar calendar = new GregorianCalendar();
        calendar.setTime(date);
        calendar.add(calendar.DATE, 1); //把日期往后增加一天,整数  往后推,负数往前移动
        date = calendar.getTime(); //这个时间就是日期往后推一天的结果
        return date;

    }
}
